﻿Imports Persistencia
Public Class ctrCidade
    Inherits ControlePadrao.ctrPadrao

#Region "Variáveis"

    Private objCidade As New perCidade

    Public Mensagens As String() = {"Descrição obrigatória.",
                                    "Estado obrigatório.",
                                    "Exclusão cancelada. Cidade vinculada a um logradouro.",
                                    "Cidade cadastrada."}

    Public sCamposDemonstracao As String() = {"Identificador", "Cidade", "Cód. UF", "UF"}
    Public sCamposTabela As String() = {"codCidade", "descCidade", "codEstado", "descEstado"}
    Public sCamposChave As String() = {"codCidade", "descCidade", "codEstado"}
    Public sTitulosColunas As String() = {"Identificador", "Cidade", "Cód. UF", "UF"}

    Public sCamposDemonstracaoUF As String() = {"Identificador", "Cidade"}
    Public sCamposTabelaUF As String() = {"codCidade", "descCidade"}
    Public sCamposChaveUF As String() = {"codCidade", "descCidade"}
    Public sTitulosColunasUF As String() = {"Identificador", "Cidade"}

#End Region

#Region "Enumerações"

    Public Enum eMensagens
        DESC_OBRIGATORIA = 0
        UF_OBRIGATORIO = 1
        CIDD_LOGRADOURO = 2
        CIDD_CADASTRADA = 3
    End Enum

#End Region

#Region "Propriedades"

    Public Property CodCidade As Int32

#End Region

#Region "Métodos"

    Public Function selecionaCidadePorEstado(ByVal iCodEstado As Int32) As DataTable

        Try
            Return objCidade.selecionaCidadePorEstado(iCodEstado)
        Catch ex As Exception
            Throw New Exception("Ocorreu um erro no método selecionaCidadePorEstado." &
                                Environment.NewLine & ex.Message)
        End Try

    End Function

    Public Function selecionarCidade() As DataTable
        Try
            Return Me.objCidade.selecionarCidade
        Catch ex As Exception
            Throw New Exception("Ocorreu um erro no método selecionarCidade." &
                                Environment.NewLine & ex.Message)
        End Try
    End Function

    Public Function selecionarCidadeCodigo(ByVal iCodCidade As Int32) As DataRow
        Try
            Return Me.objCidade.selecionarCidadeCodigo(iCodCidade)
        Catch ex As Exception
            Throw New Exception("Ocorreu um erro no método selecionarCidade." &
                                Environment.NewLine & ex.Message)
        End Try
    End Function

    Public Function selecionarUF() As DataTable
        Try
            Return Me.objCidade.selecionarUF
        Catch ex As Exception
            Throw New Exception("Ocorreu um erro no método selecionarUF." &
                                Environment.NewLine & ex.Message)
        End Try
    End Function

    Public Function excluirCidade(ByVal iCodCidade As Int32) As Boolean

        Dim bRetorno As Boolean = False

        Try

            If Me.validarCidade(eTipoValidacao.EXCLUSAO, iCodCidade, 0, String.Empty) Then
                Me.objCidade.excluirCidade(iCodCidade)
                bRetorno = True
            End If

        Catch ex As Exception
            Throw New Exception("Ocorreu um erro no método excluirCidade." &
                                Environment.NewLine & ex.Message)

        End Try

        Return bRetorno

    End Function

    Private Function validarCidade(ByVal tipoValidacao As eTipoValidacao,
                                   ByVal iCodCidade As Int32,
                                   ByVal iCodUF As Int32,
                                   ByVal sDescricao As String) As Boolean

        Dim bRetorno As Boolean = True

        Try

            Select Case tipoValidacao

                Case eTipoValidacao.GRAVACAO

                    If String.IsNullOrWhiteSpace(sDescricao) Then
                        MyBase.adicionarMensagensValidacao(eMensagens.DESC_OBRIGATORIA,
                                                           ctrTipoEndereco.eTipoLog.ERRO,
                                                           Me.Mensagens(eMensagens.DESC_OBRIGATORIA))

                        bRetorno = False
                    End If

                    If iCodUF = 0 Then
                        MyBase.adicionarMensagensValidacao(eMensagens.UF_OBRIGATORIO,
                                                           ctrTipoEndereco.eTipoLog.ERRO,
                                                           Me.Mensagens(eMensagens.UF_OBRIGATORIO))

                        bRetorno = False
                    End If

                    If Not Me.objCidade.validarCidade(iCodCidade, iCodUF, sDescricao) Then

                        MyBase.adicionarMensagensValidacao(eMensagens.CIDD_CADASTRADA,
                                                           ctrTipoEndereco.eTipoLog.ERRO,
                                                            Me.Mensagens(eMensagens.CIDD_CADASTRADA))

                        bRetorno = False

                    End If

                Case eTipoValidacao.EXCLUSAO

                    If Not Me.objCidade.validarExclusaoCidade(iCodCidade) Then
                        MyBase.adicionarMensagensValidacao(eMensagens.CIDD_LOGRADOURO,
                                                           ctrTipoEndereco.eTipoLog.ERRO,
                                                           Me.Mensagens(eMensagens.CIDD_LOGRADOURO))

                        bRetorno = False
                    End If

            End Select

        Catch ex As Exception

            Throw New Exception("Ocorreu um erro no método validarCidade." &
                                Environment.NewLine & ex.Message)

        End Try

        Return bRetorno

    End Function

    Public Function gravarCidade(ByVal iCodCidade As Int32,
                                 ByVal iCodUF As Int32,
                                 ByVal sDescCidade As String,
                                 ByVal bCapital As Boolean) As Boolean

        Dim bRetorno As Boolean = False

        Try

            MyBase.limparMensagensValidacao()

            If Me.validarCidade(ctrTipoServico.eTipoValidacao.GRAVACAO,
                                iCodCidade,
                                iCodUF,
                                sDescCidade) Then

                If bCapital Then
                    Me.objCidade.editarCapitalEstado(iCodUF)
                End If

                If iCodCidade = 0 Then
                    iCodCidade = Me.objCidade.inserirCidade(sDescCidade.Trim,
                                                            iCodUF,
                                                            bCapital)
                Else
                    Me.objCidade.editarCidade(iCodCidade,
                                              iCodUF,
                                              sDescCidade.Trim,
                                              bCapital)
                End If

                Me.CodCidade = iCodCidade

                bRetorno = True

            End If

        Catch ex As Exception

            Throw New Exception("Ocorreu um erro no método gravarCidade." &
                                Environment.NewLine & ex.Message)

        End Try

        Return bRetorno

    End Function

    Public Function selecionarCidadeEstado(ByVal iCodEstado As Int32,
                                           ByVal sCidade As String) As DataRow

        Try

            Return Me.objCidade.selecionarCidadeEstado(iCodEstado,
                                                       sCidade)

        Catch ex As Exception
            Throw New Exception("Ocorreu um erro no método selecionarCidadeEstado." & Environment.NewLine & ex.Message)
        End Try

    End Function

    Public Function selecionarCapitalEstado(ByVal iCodEstado As Int32,
                                            ByVal iCodCidade As Int32) As DataRow

        Try

            Return Me.objCidade.selecionarCapitalEstado(iCodEstado,
                                                        iCodCidade)

        Catch ex As Exception
            Throw New Exception("Ocorreu um erro no método selecionarCapitalEstado." & Environment.NewLine & ex.Message)
        End Try

    End Function

    Public Function retornarCodCapitalEstado(ByVal iCodEstado As Int32) As Int32

        Try
            Return Me.objCidade.retornarCodCapitalEstado(iCodEstado)
        Catch ex As Exception
            Throw New Exception("Ocorreu um erro no método retornarCodCapitalEstado." & Environment.NewLine & ex.Message)
        End Try

    End Function

#End Region

End Class
